package servidor;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;

import clasesBasicas.*;

public class GestorBDPlacas implements IGestorBDPlacas{
	
	Connection conexionBD;
	
	public GestorBDPlacas(Connection c) {

		conexionBD=c;
	}

	@Override
	public ArrayList<String> buscarPorOpcion(String opcion, String patron) {
		
		ArrayList <String> listaResp= new ArrayList<String>();
		
		if(opcion.equals("Todas"))
		{
			//busqueda en todas las tablas (Variables/Estado)
			String listado="";
			Statement temps=null;
			int actualPlaca;
			boolean primeraVez=true;
			ResultSet resultSetPlaca = null;
			boolean esEntero=true;
			int valor = 0;
			try {
				temps=conexionBD.createStatement();
				try{
					valor= Integer.parseInt(patron);
					
				}catch(NumberFormatException e)
				{
					System.out.println("[FORMATEO INCORRECTO]   No es un entero");
					esEntero=false;
				}
				String sentencia;
				if(esEntero)
				{
					sentencia = "SELECT vp.id_placa, vp.id_variable, funcion, vp.estado_variable, a.descripcion FROM variables v, variables_placas vp, accion a WHERE v.id=vp.id_variable AND vp.id_ultima_accion=a.id AND v.id LIKE "+valor+" OR v.id_variable LIKE '"+patron+"' OR v.nombre LIKE '"+patron+"' ORDER BY v.id";
					//sentencia = "SELECT * FROM variables v WHERE id="+valor+" OR id_variable='"+patron+"' OR nombre='"+patron+"' ORDER BY id";
				}
				else
				{
					sentencia = "SELECT vp.id_placa, vp.id_variable, funcion, vp.estado_variable, a.descripcion FROM variables v, variables_placas vp, accion a WHERE v.id=vp.id_variable AND vp.id_ultima_accion=a.id AND v.id_variable LIKE '"+patron+"' OR v.nombre LIKE '"+patron+"' ORDER BY v.id";
					//sentencia = "SELECT * FROM variables v WHERE id_variable='"+patron+"' OR nombre='"+patron+"' ORDER BY id";
				}
				System.out.println("[SENTENCIA BUSQUEDA] "+sentencia);
				resultSetPlaca = temps.executeQuery(sentencia);
				System.out.println(resultSetPlaca.toString());
				int i=01;
				
				while(resultSetPlaca.next())
				{
					listado="";
						listado=listado+"ELEM "+String.format("%02d", i)+" "+resultSetPlaca.getInt(1)+"; "+resultSetPlaca.getString("id_variable")+"; "+resultSetPlaca.getString("funcion")+"; "+resultSetPlaca.getString("estado_variable")+"; "+resultSetPlaca.getString("descripcion");	
						System.out.println(listado);
						listaResp.add(listado);
						i++;
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("[BD]   ERROR al Buscar");
				e.printStackTrace();
			}
			//listaResp.add("\n");
			cierres(temps, resultSetPlaca);
			listaResp.add("203 FINLISTAVAR");
			//System.out.println(listado);
			
			listado="";
			ArrayList<Placa>temp= new ArrayList<Placa>();
			temps=null;
			resultSetPlaca = null;
			try {
				temps=conexionBD.createStatement();
				try{
					valor= Integer.parseInt(patron);
					
				}catch(NumberFormatException e)
				{
					System.out.println("[FORMATEO INCORRECTO]   No es un entero");
					esEntero=false;
				}
				String sentencia;
				if(esEntero)
				{
					sentencia = "SELECT id, id_placa, descripcion, estado_placa FROM placas p WHERE id="+valor+" OR id_placa LIKE '"+patron+"' OR descripcion LIKE '"+patron+"' ORDER BY id";
				}
				else
				{
					sentencia = "SELECT id, id_placa, descripcion, estado_placa FROM placas p WHERE id_placa LIKE '"+patron+"' OR descripcion LIKE '"+patron+"' ORDER BY id";
				}
				resultSetPlaca = temps.executeQuery(sentencia);
				System.out.println(resultSetPlaca.toString());
				int i=01;
				
				while(resultSetPlaca.next())
				{
					listado="";
					    listado=listado+"ELEM "+String.format("%02d", i)+" "+resultSetPlaca.getInt("id")+"; "+resultSetPlaca.getString("id_placa")+"; "+resultSetPlaca.getString("descripcion")+"; "+resultSetPlaca.getString("estado_placa")+";";	
						System.out.println(listado);
						listaResp.add(listado);
						i++;
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("[BD]   ERROR al Buscar");
				e.printStackTrace();
			}
			//listaResp.add("\n");
			listaResp.add("202 FINLISTA");
			
			
			
		}
		else
		{
			if(opcion.equals("Variables"))
			{
				String listado="";
				Statement temps=null;
				int actualPlaca;
				boolean primeraVez=true;
				ResultSet resultSetPlaca = null;
				int valor = 0;
				try {
					temps=conexionBD.createStatement();
					boolean esEntero=true;
					try{
						valor= Integer.parseInt(patron);
						
					}catch(NumberFormatException e)
					{
						System.out.println("[FORMATEO INCORRECTO]   No es un entero");
						esEntero=false;
					}
					String sentencia;
					if(esEntero)
					{
						sentencia = "SELECT vp.id_placa, vp.id_variable, funcion, vp.estado_variable, a.descripcion FROM variables v, variables_placas vp, accion a WHERE v.id=vp.id_variable AND vp.id_ultima_accion=a.id AND v.id LIKE "+valor+" OR v.id_variable LIKE '"+patron+"' OR v.nombre LIKE '"+patron+"' ORDER BY v.id";
						//sentencia = "SELECT * FROM variables v WHERE id="+valor+" OR id_variable='"+patron+"' OR nombre='"+patron+"' ORDER BY id";
					}
					else
					{
						sentencia = "SELECT vp.id_placa, vp.id_variable, funcion, vp.estado_variable, a.descripcion FROM variables v, variables_placas vp, accion a WHERE v.id=vp.id_variable AND vp.id_ultima_accion=a.id AND v.id_variable LIKE '"+patron+"' OR v.nombre LIKE '"+patron+"' ORDER BY v.id";
						//sentencia = "SELECT * FROM variables v WHERE id_variable='"+patron+"' OR nombre='"+patron+"' ORDER BY id";
					}
					System.out.println("[SENTENCIA BUSQUEDA] "+sentencia);
					resultSetPlaca = temps.executeQuery(sentencia);
					System.out.println(resultSetPlaca.toString());
					int i=01;
					
					while(resultSetPlaca.next())
					{
						listado="";
							listado=listado+"ELEM "+String.format("%02d", i)+" "+resultSetPlaca.getInt(1)+"; "+resultSetPlaca.getString("id_variable")+"; "+resultSetPlaca.getString("funcion")+"; "+resultSetPlaca.getString("estado_variable")+"; "+resultSetPlaca.getString("descripcion");	
							System.out.println(listado);
							listaResp.add(listado);
							i++;
					}
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					System.out.println("[BD]   ERROR al Buscar");
					e.printStackTrace();
				}
				//listaResp.add("\n");
				cierres(temps, resultSetPlaca);
				listaResp.add("202 FINLISTA");
				//System.out.println(listado);
				
			}
			else
			{
				if(opcion.equals("Estado"))
				{
					String listado="";
					Statement temps=null;
					int actualPlaca;
					boolean primeraVez=true;
					ResultSet resultSetPlaca = null;
					String sentencia="";
					int valor = 0;
					try {
						temps=conexionBD.createStatement(); //estado='O*'
						sentencia = "SELECT vp.id_placa, vp.id_variable, funcion, vp.estado_variable, a.descripcion FROM variables v, variables_placas vp, accion a WHERE v.id=vp.id_variable AND vp.id_ultima_accion=a.id AND estado_variable LIKE '"+patron+"' ORDER BY v.id";
						System.out.println("[SENTENCIA BUSQUEDA] "+sentencia);
						resultSetPlaca = temps.executeQuery(sentencia);
						System.out.println(resultSetPlaca.toString());
						int i=01;
						
						while(resultSetPlaca.next())
						{
							listado="";
							listado=listado+"ELEM "+String.format("%02d", i)+" "+resultSetPlaca.getInt(1)+"; "+resultSetPlaca.getString(2)+"; "+resultSetPlaca.getString(3)+"; "+resultSetPlaca.getString(4)+"; "+resultSetPlaca.getString(5);	
							System.out.println(listado);
							listaResp.add(listado);
							i++;
						}
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						System.out.println("[BD]   ERROR al Buscar");
						e.printStackTrace();
					}
					//listaResp.add("\n");
					listaResp.add("203 FINLISTAVAR");
					cierres(temps, resultSetPlaca);
					//System.out.println(listado);
					
					listado="";
					temps=null;
					primeraVez=true;
					resultSetPlaca = null;
					sentencia="";
					try {
						temps=conexionBD.createStatement(); //estado='O*'
						sentencia = "SELECT id, id_placa, descripcion, estado_placa FROM placas p WHERE estado_placa LIKE '"+patron+"' ORDER BY id";
						System.out.println("[SENTENCIA BUSQUEDA] "+sentencia);
						resultSetPlaca = temps.executeQuery(sentencia);
						System.out.println(resultSetPlaca.toString());
						int i=01;
						while(resultSetPlaca.next())
						{
							listado="";
							listado=listado+"ELEM "+String.format("%02d", i)+" "+resultSetPlaca.getInt("id")+"; "+resultSetPlaca.getString("id_placa")+"; "+resultSetPlaca.getString("descripcion")+"; "+resultSetPlaca.getString("estado_placa")+";";	
							System.out.println(listado);
							listaResp.add(listado);
							i++;
						}
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						System.out.println("[BD]   ERROR al Buscar");
						e.printStackTrace();
					}
					//listaResp.add("\n");
					listaResp.add("202 FINLISTAPLACA");
					cierres(temps, resultSetPlaca);	
					
				}
				else
				{
					if(opcion.equals("Placa"))
					{
						String listado="";
						ArrayList<Placa>temp= new ArrayList<Placa>();
						Statement temps=null;
						int actualPlaca;
						boolean primeraVez=true;
						ResultSet resultSetPlaca = null;
						int valor = 0;
						try {
							temps=conexionBD.createStatement();
							boolean esEntero=true;
							try{
								valor= Integer.parseInt(patron);
								
							}catch(NumberFormatException e)
							{
								System.out.println("[FORMATEO INCORRECTO]   No es un entero");
								esEntero=false;
							}
							String sentencia;
							if(esEntero)
							{
								sentencia = "SELECT id, id_placa, descripcion, estado_placa FROM placas p WHERE id="+valor+" OR id_placa LIKE '"+patron+"' OR descripcion LIKE '"+patron+"' ORDER BY id";
							}
							else
							{
								sentencia = "SELECT id, id_placa, descripcion, estado_placa FROM placas p WHERE id_placa LIKE '"+patron+"' OR descripcion LIKE '"+patron+"' ORDER BY id";
							}
							resultSetPlaca = temps.executeQuery(sentencia);
							System.out.println(resultSetPlaca.toString());
							int i=01;
							
							while(resultSetPlaca.next())
							{
								listado="";
								
								/* NO BORRAR POR FAVOR
								int temporal=1;
								ResultSetMetaData rsmd=resultSetPlaca.getMetaData();
								while(temporal<rsmd.getColumnCount())
								{
									 System.out.println(rsmd.getColumnName(temporal));
									temporal++;
								}*/
								
									/*String estado;
									if(resultSetPlaca.getBoolean("estado_placa"))
									{
										estado="ON";
									}
									else
									{
										estado="OFF";
									}*/
								    listado=listado+"ELEM "+String.format("%02d", i)+" "+resultSetPlaca.getInt("id")+"; "+resultSetPlaca.getString("id_placa")+"; "+resultSetPlaca.getString("descripcion")+"; "+resultSetPlaca.getString("estado_placa")+";";	
									System.out.println(listado);
									listaResp.add(listado);
									i++;
							}
						} catch (SQLException e) {
							// TODO Auto-generated catch block
							System.out.println("[BD]   ERROR al Buscar");
							e.printStackTrace();
						}
						//listaResp.add("\n");
						listaResp.add("202 FINLISTA");
						
					}
				}
			}
		}

		return listaResp;
	}
	
	public void borrarVariableEnPlaca(String variable, String placa){
		//Busca una variable por su nombre y la borra de la plca relazionda
		Statement s=null;
		String sentencia=null;
		try {
			s=conexionBD.createStatement();
			sentencia="DELETE FROM variables_placas WHERE id_placa = ( SELECT id FROM placas WHERE id_placa = '" + placa + "') AND id_variable ="
					+ "( SELECT id FROM variables WHERE id_variable = '" + variable + "');";  	
			System.out.println(sentencia);
			s.executeUpdate(sentencia);
		} catch (SQLException e) {
			System.out.println("[BD]   ERROR al eliminar la variable.");
			//e.printStackTrace();
		}
		cierres(s, null);
		
	}
	
	public ArrayList<String> listarVariables() {

		//Ordenar por id_placa
		String listado="";
		ArrayList <String> listaResp= new ArrayList<String>();
		ArrayList<Placa>temp= new ArrayList<Placa>();
		Statement temps=null;
		int actualPlaca;
		boolean primeraVez=true;
		ResultSet resultSetPlaca = null;;
		try {
			temps=conexionBD.createStatement();
			String placa = "SELECT p.id_placa, v.id_variable, a.descripcion  FROM placas p, variables v, variables_placas vp, accion a WHERE p.id=vp.id_placa AND v.id=vp.id_variable AND vp.id_ultima_accion=a.id ORDER BY p.id";
			resultSetPlaca = temps.executeQuery(placa);
			System.out.println(resultSetPlaca.toString());
			int i=01;
			while(resultSetPlaca.next())
			{
				listado="";
				
				/* NO BORRAR POR FAVOR
				int temporal=1;
				ResultSetMetaData rsmd=resultSetPlaca.getMetaData();
				while(temporal<rsmd.getColumnCount())
				{
					 System.out.println(rsmd.getColumnName(temporal));
					temporal++;
				}*/
				
					/*String estado;
					if(resultSetPlaca.getBoolean("estado_placa"))
					{
						estado="ON";
					}
					else
					{
						estado="OFF";
					}*/
					listado=listado+" "+resultSetPlaca.getString(1)+"; "+resultSetPlaca.getString(2)+"; "+resultSetPlaca.getString(3);	
					System.out.println(listado);
					listaResp.add(listado);
					i++;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al obtener variables.");
			e.printStackTrace();
		}
		//listaResp.add("\n");
		listaResp.add("202 FINLISTA");
		//System.out.println(listado);
		
		return listaResp;
	}





	@Override
	public ArrayList<String> listarPlacas() {

		//Ordenar por id_placa
		String listado="";
		ArrayList <String> listaResp= new ArrayList<String>();
		ArrayList<Placa>temp= new ArrayList<Placa>();
		Statement temps=null;
		int actualPlaca;
		boolean primeraVez=true;
		ResultSet resultSetPlaca = null;;
		try {
			temps=conexionBD.createStatement();
			String placa = "SELECT * FROM placas p, variables v, variables_placas vp, accion a WHERE p.id=vp.id_placa AND v.id=vp.id_variable AND vp.id_ultima_accion=a.id ORDER BY p.id";
			resultSetPlaca = temps.executeQuery(placa);
			System.out.println(resultSetPlaca.toString());
			int i=01;
			while(resultSetPlaca.next())
			{
				listado="";
				
				/* NO BORRAR POR FAVOR
				int temporal=1;
				ResultSetMetaData rsmd=resultSetPlaca.getMetaData();
				while(temporal<rsmd.getColumnCount())
				{
					 System.out.println(rsmd.getColumnName(temporal));
					temporal++;
				}*/
				
					/*String estado;
					if(resultSetPlaca.getBoolean("estado_placa"))
					{
						estado="ON";
					}
					else
					{
						estado="OFF";
					}*/
					listado=listado+"ELEM "+String.format("%02d", i)+" "+resultSetPlaca.getString(2)+"; "+resultSetPlaca.getString(7)+"; "+resultSetPlaca.getString("funcion")+"; "+resultSetPlaca.getString("estado_variable")+";"
							+ " "+resultSetPlaca.getString(15);	
					System.out.println(listado);
					listaResp.add(listado);
					i++;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al obtener placas.");
			e.printStackTrace();
		}
		//listaResp.add("\n");
		listaResp.add("202 FINLISTA");
		//System.out.println(listado);
		
		return listaResp;
	}

	@Override
	public int activarVariable(String id_placa, String id_variable) {

		int respuesta=0;
		Statement temp=null;
		String sqlStatementString=null;
		try {
			temp=conexionBD.createStatement();
			sqlStatementString="UPDATE variables_placas SET estado_variable='ON' WHERE id_placa=(SELECT id FROM placas WHERE id_placa='"+id_placa+"') "
					+ "AND id_variable=(SELECT id FROM variables WHERE id_variable='"+id_variable+"')";  	
			respuesta=temp.executeUpdate(sqlStatementString);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("[BD]   ERROR al activar la variable "+id_variable+" de la placa "+id_placa);
		}
		cierres(temp, null);
		System.out.println("[RESULTADO ESTADO]     "+respuesta);
		if(respuesta>0)
		{
			System.out.println("*********HEMOS MODIFICADO**********");
		}
		return respuesta;
	}

	@Override
	public int desactivarVariable(String id_placa, String id_variable) {
		int respuesta=0;
		Statement temp=null;
		String sqlStatementString=null;
		try {
			temp=conexionBD.createStatement();
			sqlStatementString="UPDATE variables_placas SET estado_variable='OFF' WHERE id_placa=(SELECT id FROM placas WHERE id_placa='"+id_placa+"') "
					+ "AND id_variable=(SELECT id FROM variables WHERE id_variable='"+id_variable+"')";  	
			respuesta=temp.executeUpdate(sqlStatementString);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			System.out.println("[BD]   ERROR al desactivar la variable "+id_variable+" de la placa "+id_placa);
		}
		cierres(temp, null);
		return respuesta;
	}

	@Override
	public int estadoPlaca(String id_placa) {
		// Devuelve 1 si esta ON o 0 si esta OFF
		
		String resultado="";
		Statement s=null;
		ResultSet resultSet = null;
		try {
			s=conexionBD.createStatement();
			String comprobarUs = " SELECT estado_placa FROM placas WHERE id_placa='"+id_placa+"' ";
			resultSet = s.executeQuery(comprobarUs);
			resultado=resultSet.getString("estado_placa");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al ver el estado de la placa "+ id_placa);
			//e.printStackTrace();
		}
		cierres(s, resultSet);
		
		if(resultado.equals("ON")){
			System.out.println("[ESTADO] "+id_placa+" está a true.");
			return 1;
		}
		else {
			System.out.println("[ESTADO] "+id_placa+" está a false.");
			return 0;
		}		
	}

	@Override
	public int estadoVariable(String id_placa, String id_variable) {

		String resultado="";
		Statement s=null;
		ResultSet resultSet = null;
		try {
			System.out.println("[ESTADO]	CREAR CONEXION");
			s=conexionBD.createStatement();
			System.out.println("[ESTADO]	CREAR SENTENCIA A EJECUTAR.");
			String comprobarUs = " SELECT estado_variable FROM placas p, variables v, variables_placas vp WHERE "
					+ "p.id=vp.id_placa AND vp.id_variable=v.id AND p.id_placa='"+id_placa+"' AND v.id_variable='"+id_variable+"'";
			System.out.println("[ESTADO]	SENTENCIA A EJECUTAR CREADA.");
			resultSet = s.executeQuery(comprobarUs);
			System.out.println("GET COLUMN!!!");
			
			resultado=resultSet.getString("estado_variable");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al ver el estado de la variable "+id_variable+" de la placa "+id_placa);
			e.printStackTrace();
		}
		cierres(s, resultSet);
		System.out.println("ESTADO:*****"+resultado+"*****");
		if(resultado.equals("ON")){
			return 1;
		}
		else {
			return 0;
		}
	}

	@Override
	public int realizarAccion(String id_placa, String id_variable, String accion, String valor) {
		// **************************************************************************
		// A LA ESPERA DE SABER QUE HACER CON VALOR
		int respuesta=0;
		Statement temp=null;
		String sqlStatementString=null;
		accion=accion+" "+valor;
		try {
			temp=conexionBD.createStatement();
			sqlStatementString="UPDATE variables_placas SET id_ultima_accion=(SELECT id FROM accion WHERE descripcion='"+accion+"') WHERE id_placa=(SELECT id FROM placas WHERE id_placa='"+id_placa+"') "
					+ "AND id_variable=(SELECT id FROM variables WHERE id_variable='"+id_variable+"')";
			System.out.println(sqlStatementString);
			respuesta=temp.executeUpdate(sqlStatementString);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("[BD]   ERROR al realizar la accion "+accion+" sobre la variable "+id_variable+" de la placa "+id_placa);
		}
		cierres(temp, null);
		return respuesta;
	}

	@Override
	public String obtenerFoto(String id_placa) {

		String path="";
		Statement s=null;
		ResultSet resultSet = null;
		try {
			s=conexionBD.createStatement();
			String comprobarUs = " SELECT foto FROM placas WHERE id_placa='"+id_placa+"' ";
			resultSet = s.executeQuery(comprobarUs);
			path=resultSet.getString("foto");	
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al ver el estado de la placa "+ id_placa);
			//e.printStackTrace();
		}	
		cierres(s, resultSet);
		return path;
	}

	@Override
	public boolean existePlaca(String id_placa) {
		//true si existe, false si no
		boolean resultado=false;
		Statement s=null;
		ResultSet resultSet = null;
		try {
			s=conexionBD.createStatement();
			String comprobarUs = " SELECT * FROM placas WHERE id_placa='"+id_placa+"' ";
			resultSet = s.executeQuery(comprobarUs);
			resultado=resultSet.next();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al ver si existe la placa "+ id_placa);
			//e.printStackTrace();
		}
		cierres(s, resultSet);
		return resultado;
	}

	@Override
	public boolean existeVariable(String id_placa, String id_variable) {
		//true si existe, false si no
		
		boolean resultado=false;
		Statement s=null;
		ResultSet resultSet = null;
		try {
			s=conexionBD.createStatement();
			String comprobarUs = " SELECT * FROM placas p, variables v, variables_placas vp WHERE "
					+ "p.id=vp.id_placa AND vp.id_variable=v.id AND p.id_placa='"+id_placa+"' AND v.id_variable='"+id_variable+"'";
			resultSet = s.executeQuery(comprobarUs);
			resultado=resultSet.next();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al ver el estado de la placa "+ id_placa);
			//e.printStackTrace();
		}
		cierres(s, resultSet);
		return resultado;

	}

	@Override
	public int activarPlaca(String id_placa) {
		
		int respuesta=0;
		Statement temp=null;
		String sqlStatementString=null;
		try {
			temp=conexionBD.createStatement();
			sqlStatementString="UPDATE placas SET estado_placa='ON' WHERE id_placa='"+id_placa+"'";  	
			respuesta=temp.executeUpdate(sqlStatementString);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			System.out.println("[BD]   ERROR al activar la placa "+id_placa);
		}
		cierres(temp, null);
		return respuesta;
	}

	@Override
	public int desactivarPlaca(String id_placa) 
	{
		
		int respuesta=0;
		Statement temp=null;
		String sqlStatementString=null;
		try {
			temp=conexionBD.createStatement();
			sqlStatementString="UPDATE placas SET estado_placa='OFF' WHERE id_placa='"+id_placa+"'";  	
			respuesta=temp.executeUpdate(sqlStatementString);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			System.out.println("[BD]   ERROR al activar la placa "+id_placa);
		}
		cierres(temp, null);
		return respuesta;
	}
	
	@Override
	public ArrayList<String> obtenerAcciones(String id_placa, String id_variable) {
		
		ArrayList <String> listaResp= new ArrayList<String>();
		ArrayList<Placa>temp= new ArrayList<Placa>();
		Statement temps=null;
		int actualPlaca;
		boolean primeraVez=true;
		ResultSet resultSetPlaca = null;;
		try {
			temps=conexionBD.createStatement();
			String placa = "SELECT descripcion FROM accion a, variables v, variables_placas vp WHERE (SELECT id FROM placas WHERE id_placa='"+id_placa+"')=vp.id_placa AND v.id=vp.id_variable AND a.id_variable=vp.id_variable AND v.id_variable='"+id_variable+"'";
			resultSetPlaca = temps.executeQuery(placa);
			System.out.println(resultSetPlaca.toString());
			while(resultSetPlaca.next())
			{
				System.out.println("AQUI WEY");
				listaResp.add(resultSetPlaca.getString("Descripcion"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al obtener acciones.");
			e.printStackTrace();
		}
		//listaResp.add("\n");
		listaResp.add("202 FINACCIONES");
		//System.out.println(listado);
		
		return listaResp;
		
	}
	
	public void cierres(Statement s, ResultSet r)
	{
		try {
			if(s!=null)
			{
				s.close();
			}
			
			if(r!=null)
			{
				r.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	@Override
	public void anadirAccion(String nombre, String descripcion, String variable) {
		// TODO Auto-generated method stub
		Statement s=null;
		String sentencia=null;
		try {
			s=conexionBD.createStatement();
			sentencia="INSERT INTO accion (descripcion, id_variable, id_accion) VALUES ('"+descripcion+"',(SELECT id FROM variables"
					+ " WHERE id_variable ='"+variable+"'),'"+ nombre +"')";  	
//			System.out.println(sentencia);
			s.executeUpdate(sentencia);
		} catch (SQLException e) {
			System.out.println("[BD]   ERROR al crear accion.");
			//e.printStackTrace();
		}
		cierres(s, null);
	}

	@Override
	public ArrayList<String> obtenerVariablesAccion() {
		// TODO Auto-generated method stub
		String listado="";
		ArrayList <String> listaResp= new ArrayList<String>();

		Statement temps=null;
		try{	
			temps=conexionBD.createStatement();
			String consulta = "SELECT id_variable  FROM variables";
			ResultSet resultSetPlaca = null;
			resultSetPlaca = temps.executeQuery(consulta);
			int i = 01;
			while(resultSetPlaca.next())
			{
				listado="";

				listado=listado+resultSetPlaca.getString(1);	
//				System.out.println(listado);
				listaResp.add(listado);
				i++;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al obtener variables.");
			e.printStackTrace();
		}

		return listaResp;
	}

	

	@Override
	public void cambiarUltimaAccion(String id_placa, String id_variable,
			String accion) {
		// TODO Auto-generated method stub
		Statement temp=null;
		String sqlStatementString=null;
		
		try {
			temp=conexionBD.createStatement();
			sqlStatementString="UPDATE variables_placas SET id_ultima_accion=(SELECT id FROM accion WHERE descripcion='"+accion+"') WHERE id_placa=(SELECT id FROM placas WHERE id_placa='"+id_placa+"') "
					+ "AND id_variable=(SELECT id FROM variables WHERE id_variable='"+id_variable+"')";
			System.out.println(sqlStatementString);
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("[BD]   ERROR al realizar la accion "+accion+" sobre la variable "+id_variable+" de la placa "+id_placa);
		}
		cierres(temp, null);
		
	}

	@Override
	public boolean existeAccion(String accion) {
		// TODO Auto-generated method stub
		Statement s=null;
		ResultSet resultSet = null;
		boolean existe = false;
		try {
			s=conexionBD.createStatement();
			String comprobarUs = " SELECT * FROM accion WHERE id_accion='"+accion+"' ";
			resultSet = s.executeQuery(comprobarUs);
			if(resultSet.next()){
				existe = true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR la accion ya existe.");
			//e.printStackTrace();
		}	
		cierres(s, resultSet);
		// TODO Auto-generated method stub
		return existe;
		
	}

	@Override
	public ArrayList<String> obtenerAccionesParaVariable(String variable) {
		// TODO Auto-generated method stub
		String listado="";
		ArrayList <String> listaResp= new ArrayList<String>();

		Statement temps=null;
		try{	
			temps=conexionBD.createStatement();
			String consulta = "SELECT descripcion  FROM accion WHERE id_variable=(SELECT id FROM variables WHERE id_variable = "
					+ "'"+variable+"')";
			ResultSet resultSetPlaca = null;
			resultSetPlaca = temps.executeQuery(consulta);
			System.out.println(consulta);
			int i = 01;
			while(resultSetPlaca.next())
			{
				listado="";

				listado=listado+resultSetPlaca.getString(1);	
//				System.out.println(listado);
				listaResp.add(listado);
				i++;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[BD]   ERROR al obtener variables.");
			e.printStackTrace();
		}

		return listaResp;
		
	}
	

}
